Вы поспорили с
другом, что он не попадёт в мишень, сделав n выстрелов. Вероятность попадания друга в
мишень при одном выстреле равна a процентов.
Найдите
максимальное количество выстрелов n, при котором
Вам имеет смысл заключать пари. Считается, что спор имеет смысл, если
вероятность того, что друг поразит цель хотя бы одним из выстрелов,
строго меньше 50%.
Вход. Каждая строка содержит одно целое число a (1 ≤ a ≤ 100) – вероятность
попадания друга в мишень при одном выстреле.
Выход. Для каждого теста в отдельной строке выведите максимальное
количество выстрелов, при котором Вам имеет смысл спорить.
|
Пример
входа |
Пример
выхода |
|
40 20 50 1 |
1 3 0 68 |
РЕШЕНИЕ
вероятность
Анализ алгоритма
Вероятность того, что друг
попадёт в мишень при одном выстреле, равна
p = a / 100
Тогда вероятность того,
что он не попадёт в мишень при одном выстреле, равна
1 – p = 1 – a
/ 100
Поскольку все выстрелы независимы, то вероятность того,
что друг не попадёт в мишень ни разу, сделав n выстрелов, равна
(1 – a / 100.0)n
Вероятность того, что друг
попадёт в мишень хотя бы один раз за n выстрелов, равна дополнению к
этому событию:
1 – (1 – a / 100.0)n
По условию задачи спор
имеет смысл, если вероятность хотя бы одного попадания строго меньше 50%, то
есть:
1 – (1 – a / 100.0)n < 0.5
Преобразуем
неравенство:
(1 – a / 100.0)n > 0.5
Таким образом, требуется
найти максимальное целое число n, для которого выполняется это
неравенство. Как только при увеличении n вероятность промаха по всем
выстрелам становится меньше или равной 0.5, спор перестаёт быть выгодным.
Реализация алгоритма
Читаем входное значение вероятности a.
while (scanf("%d", &a) == 1)
{
Вероятность промаха по мишени вычисляем в переменной miss.
miss = 1
- a / 100.0;
В переменной p вычисляеи вероятность (1 – a / 100.0)n.
p = miss;
n = 0;
Ищем наибольшее значение n, для которого (1 – a / 100.0)n > 0.5.
while (p > 0.5)
{
n++;
p *=
miss;
}
Выводим ответ.
printf("%d\n", n);
}